#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int cnt = 0;
void handler(int sig)
{
    cout << "sig num: " <<sig << ", cnt: " << cnt << endl;
    int n = alarm(2);
}
int main()
{
    signal(SIGALRM, handler);
    alarm(1);
    while(true)
    {
        sleep(1);
        cout << "cnt: " << cnt++ <<endl;
    }
    return 0;
}

// int main()
// {
//     alarm(1);
//     int cnt = 0;
//     while(true)
//     {
//         cout << "cnt: " << cnt++ <<endl;
//     }
//     return 0;
// }

// int main()
// {
//     int cnt = 0;
//     while(true)
//     {
//         cout << "cnt: " << cnt++ << endl;
//         sleep(1);
//         if(cnt == 5)
//         {
//             cout << "send 9 to caller" <<endl;
//             raise(9);
//         }
//     }
//     return 0;
// }

// int main(int argc, char* argv[])
// {
//     if(argc != 3)
//     {
//         cout << "Usage: " << argv[0] << "-signum pid" << endl;
//         exit(1);
//     }
//     int signum = stoi(argv[1]+1);
//     int sigpid = stoi(argv[2]);
//     int n = kill(sigpid, signum);
//     if(n < 0)
//     {
//         cout << "kill fail, errno: " << strerror(errno) << endl;
//         exit(2);
//     }
//     return 0;
// }

// void sigcb(int sig)
// {
//     cout << "I am a sig, sig: " <<sig<<endl;
//     exit(100);
// }
// int main()
// {
//     signal(2, sigcb);
//     //signal(2, SIG_IGN);

//     while(true)
//     {
//         cout << "I am acting..., pid: " << getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }